import viteObfuscateFile  from 'vite-plugin-javascript-obfuscator';

export default function createConfuse(viteEnv) {
    const {VITE_APP_CONFUSION,VITE_APP_CONFUSION_DISABLED_DEBUG,VITE_APP_CONFUSION_INCLUDE}= viteEnv;
    if(VITE_APP_CONFUSION == 0) return []; // 返回空数组避免插件报错
    const disabledDebug=VITE_APP_CONFUSION_DISABLED_DEBUG;
    const confuseInclude=VITE_APP_CONFUSION_INCLUDE.split(',');
    console.log('obfuscator=>', VITE_APP_CONFUSION,disabledDebug,confuseInclude);

    if (VITE_APP_CONFUSION == 1) return viteObfuscateFile({
        include: confuseInclude,
        exclude: ['node_modules/**'],
        debugger: false,
        options: {
            compact: true, // 启用代码压缩
            controlFlowFlattening: true, // 控制流扁平化（核心混淆手段）
            controlFlowFlatteningThreshold: 0.6, // 50%的代码应用控制流扁平化
            deadCodeInjection: true, // 注入死代码
            deadCodeInjectionThreshold: 0.4, // 较低的死代码比例，控制膨胀
            debugProtection: disabledDebug, // 禁用调试保护（生产环境可选）
            disableConsoleOutput: disabledDebug, // 禁用控制台输出
            identifierNamesGenerator: 'mangled', // 标准标识符混淆
            log: disabledDebug, // 禁用日志 false
            numbersToExpressions: true, // 数字转表达式
            renameGlobals: false, // 不禁用全局变量混淆（避免兼容性问题）
            rotateStringArray: true, // 旋转字符串数组
            selfDefending: disabledDebug, // 代码自保护
            splitStrings: true, // 分割字符串
            splitStringsChunkLength: 5, // 较大的分割长度，减少膨胀
            stringArray: true, // 使用字符串数组
            stringArrayEncoding: ['base64','rc4'], // 仅使用base64编码
            stringArrayThreshold: 0.8, // 80%的字符串进行混淆
            transformObjectKeys: true, // 混淆对象键名
            unicodeEscapeSequence: false, // 禁用Unicode转义（避免中文等问题）
            sourceMap: false, // 禁用source map
            target: 'browser', // 指定目标环境为浏览器
            seed: 0, // 固定混淆种子，确保构建一致性
            simplify: true, // 简化代码结构（减少膨胀）
        }
    });
    if (VITE_APP_CONFUSION == 2) return viteObfuscateFile({
        //include: ['src/utils/request.js'],
        exclude: ['node_modules/**'],
        debugger: false,
        options: {
            compact: true, // 启用代码压缩
            controlFlowFlattening: false, // 控制流扁平化（核心混淆手段）
            //controlFlowFlatteningThreshold: 0.5, // 50%的代码应用控制流扁平化
            deadCodeInjection: false, // 注入死代码
            deadCodeInjectionThreshold: 0.2, // 较低的死代码比例，控制膨胀
            debugProtection: disabledDebug, // 禁用调试保护（生产环境可选）
            disableConsoleOutput: disabledDebug, // 禁用控制台输出
            identifierNamesGenerator: 'mangled', // 标准标识符混淆
            log: disabledDebug, // 禁用日志 false
            numbersToExpressions: true, // 数字转表达式
            renameGlobals: false, // 不禁用全局变量混淆（避免兼容性问题）
            rotateStringArray: true, // 旋转字符串数组
            selfDefending: disabledDebug, // 代码自保护
            splitStrings: true, // 分割字符串
            splitStringsChunkLength: 30, // 较大的分割长度，减少膨胀
            stringArray: true, // 使用字符串数组
            stringArrayEncoding: ['base64'], // 仅使用base64编码
            stringArrayThreshold: 0.2, // 80%的字符串进行混淆
            transformObjectKeys: true, // 混淆对象键名
            unicodeEscapeSequence: false, // 禁用Unicode转义（避免中文等问题）
            sourceMap: false, // 禁用source map
            target: 'browser', // 指定目标环境为浏览器
            seed: 0, // 固定混淆种子，确保构建一致性
            simplify: true, // 简化代码结构（减少膨胀）
        }
    })
    return []; // 返回空数组避免插件报错
}

